home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / New System Software Extensions / OpenDoc A6 / OpenDoc Parts Framework / OPF / Examples / Text / Textension / Include / TextensionIOSuite.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-21  |  5.3 KB  |  222 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        TextensionIOSuite.h
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Written by:    Essam Zaky
  7.  
  8.     Copyright:    © 1994 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <2>      1/4/94    EZ        clean up
  13.          <1>      1/4/94    EZ        first checked in
  14.  
  15. */
  16.  
  17. #ifndef _TextensionIOSuite_
  18. #define _TextensionIOSuite_
  19.  
  20. #ifndef _ToolBoxDump_
  21. #include "ToolBoxDump.h"
  22. #endif
  23.  
  24. #ifndef _TextensionCommon_
  25. #include "TextensionCommon.h"
  26. #endif
  27.  
  28. #ifndef _Array_
  29. #include "Array.h"
  30. #endif
  31.  
  32. #ifndef _Streams_
  33. #include "Streams.h"
  34. #endif
  35.  
  36. #ifndef _AttrObject_
  37. #include "AttrObject.h"
  38. #endif
  39.  
  40. #ifndef _ObjectsRanges_
  41. #include "ObjectsRanges.h"
  42. #endif
  43.  
  44. #ifndef _Formatter_
  45. #include "Formatter.h"
  46. #endif
  47.  
  48.  
  49. //***************************************************************************************************
  50.  
  51.  
  52. const short kMaxRegisteredObjects = 6;
  53.  
  54. class CRegisteredObjects : private SingleObject {
  55.     public :
  56.         inline void IRegisteredObjects() {fCount = 0;}
  57.         
  58.         void Free();
  59.         
  60.         inline short GetCountObjects() const {return fCount;}
  61.         
  62.         CAttrObject* GetIndObject(short index) const;
  63.         
  64.         void Add(CAttrObject* theObject);
  65.         
  66.         CAttrObject* Search(ClassId objClassId);
  67.         
  68.     private:
  69.         short fCount;
  70.         CAttrObject* fTable[kMaxRegisteredObjects];
  71. };
  72.  
  73. extern CRegisteredObjects gRegisteredRuns;
  74.  
  75. #ifdef txtnRulers
  76. extern CRegisteredObjects gRegisteredRulers;
  77. #endif
  78.  
  79. extern uchar gGraphicsRunAssocChar;
  80. //************************************************************************************************
  81.  
  82. typedef uchar TIOFlags;
  83.  
  84. const TIOFlags kNoIOFlags = 0;
  85.  
  86. const TIOFlags kIOText = 1;
  87. const TIOFlags kIORuns = 2;
  88.  
  89. #ifdef txtnRulers
  90. const TIOFlags kIORulers = 4;
  91. #endif
  92.  
  93. #ifdef txtnRulers
  94. const TIOFlags kIOTypesMask = kIOText+kIORuns+kIORulers;
  95.  
  96. const TIOFlags kIOAll = kIOText+kIORuns+kIORulers;
  97. #else
  98. const TIOFlags kIOTypesMask = kIOText+kIORuns;
  99.  
  100. const TIOFlags kIOAll = kIOText+kIORuns;
  101. #endif
  102. //***************************************************************************************************
  103.  
  104. //constants for descendents
  105. const ulong kTextIOSuiteType = 'TEXT';
  106. const ulong kRunsIOSuiteType = 'runs';
  107.  
  108. #ifdef txtnRulers
  109. const ulong kRulersIOSuiteType = 'rlrs';
  110. #endif
  111.  
  112. const long kLocalObjectIOSuiteSize = sizeof(long) + sizeof(CAttrObject*); //range len + the obj ref
  113. //***************************************************************************************************
  114.  
  115. struct TDataHeader {
  116.     ulong dataType;
  117.     long dataSize;
  118. };
  119. //***************************************************************************************************
  120.  
  121. class    CTextensionIOSuite    :    public HandleObject {
  122. public:
  123.     CTextensionIOSuite();
  124.     
  125.     OSErr ITextensionIOSuite(char local = true, CStream* stream = nil);
  126.     virtual void Free();
  127.     
  128.     static CAttrObject* GetDefaultObject(ulong ioSuiteType);
  129.     
  130.     #ifdef txtnRulers
  131.     OSErr Output(long offset, long len
  132.                         , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars
  133.                         , TIOFlags flags = kIOAll);
  134.             
  135.     OSErr Input(long offset, long len
  136.                         , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars, CFormatter* formatter
  137.                         , TIOFlags* ioFlags, long* charsCount);
  138.     #else
  139.     OSErr Output(long offset, long len
  140.                         , CObjectsRanges* runs, CArray* chars
  141.                         , TIOFlags flags = kIOAll);
  142.             
  143.     OSErr Input(long offset, long len
  144.                         , CObjectsRanges* runs, CArray* chars, CFormatter* formatter
  145.                         , TIOFlags* ioFlags, long* charsCount);
  146.     #endif
  147.     
  148.     void Empty();
  149.     
  150.     Boolean IsEmpty();
  151.     
  152. protected:
  153.     CStream* fStream;
  154.  
  155.     OSErr PutObjectRange(CAttrObject* theObj, long rangeLen);
  156.     
  157.     OSErr GetObjectRange(ulong ioSuiteType, CAttrObject** theObj, long* rangeLen);
  158.  
  159.     OSErr SearchIOSuiteType(ulong ioSuiteType, TDataHeader* header, Boolean fromStart = true);
  160.     
  161.     OSErr NewIOSuiteType(ulong ioSuiteType, long dataSize);
  162.  
  163.     OSErr PutTextIOSuite(void* textBuffer, long textSize);
  164.     
  165. private:
  166.     char fLocal;
  167.     char fExternalStream;
  168.     
  169.     OSErr OutputObjects(long offset, long len, CObjectsRanges* objRanges, ulong ioSuiteType);
  170.     
  171.     OSErr GetObjectsRanges(const TDataHeader* objectsHeader, CObjectsRanges** objectsRanges);
  172.  
  173.     void FreeIOSuiteObjects(const TDataHeader* header);
  174. };
  175. //***************************************************************************************************
  176.  
  177. class    CTextensionScrap    :    public CTextensionIOSuite {
  178. public:
  179.     CTextensionScrap();
  180.     
  181.     OSErr ITextensionScrap(CStream* stream = nil);
  182.     
  183.     //•override
  184.     #ifdef txtnRulers
  185.     virtual OSErr Output(long offset, long len
  186.                                         , CObjectsRanges* runs, CObjectsRanges* rulers, CArray* chars
  187.                                         , TIOFlags flags = kIOAll);
  188.     #else
  189.     virtual OSErr Output(long offset, long len
  190.                                                 , CObjectsRanges* runs, CArray* chars
  191.                                                 , TIOFlags flags = kIOAll);
  192.     #endif
  193.     
  194.     //•own
  195.     virtual OSErr ConvertToSystemScrap(TIOFlags* flags); //may return "noTypeErr"
  196.     
  197.     virtual OSErr ConvertFromSystemScrap(TIOFlags* flags); //may return "noTypeErr"
  198.     
  199.     Boolean CanPaste();
  200.     
  201. protected:
  202.     //•own
  203.     OSErr PutSysScrap(long length, ResType theType, Ptr source);
  204.     //calls "PutScrap" and updates "fSysScrapCount"
  205.  
  206. private:
  207.     short fScrapCount;
  208.     short fSysScrapCount;
  209.     
  210.     Boolean fCanPaste;
  211.     short fCanPasteScrapCount;
  212.     
  213.     void SetSysScrapCount();
  214.     Boolean IsNewerThanSysScrap();
  215.     
  216.     CAttrObject* GetSystemScrapIOObject(long* scrapSize);
  217.     OSErr SystemScrap2Object(CAttrObject** theObj);
  218. };
  219. //***************************************************************************************************
  220.  
  221. #endif
  222.